package Negocio;

import java.util.ArrayList;

import ClassesBasicas.Arbitro;
import Repositorio.RepArbitro;
import erro.ConexaoException;
import erro.NegocioException;
import erro.RepositorioException;


/**
 * Classe que define a regra de Neg�cio para um 
 * Arbitro e suas valida��es
 * 
 * @author prii :)
 */

public class NegocioArbitro {
	private RepArbitro rep;
	
	public NegocioArbitro(){
		rep = new RepArbitro();
	}
	
	/**
	 * Testa se o Arbitro inserido ja existe ou n�o e informa.
	 */
	
	public boolean existeArbitro(Arbitro arb) throws NegocioException {
		Arbitro tmp = new Arbitro();
		
			tmp = consultarNome(arb.getNomeArbitro());
			
			if(tmp != null)
				return true;
			else
				return false;
	}


/**
 * Valida��o dos campos do arbitro antes de salvar	
 * @param arb
 * @throws NegocioException
 */
public void salvar(Arbitro arb) throws NegocioException{

	//verifica se o Arbitro � nulo ou vazio
	if(arb == null || arb.equals("")){
		throw new NegocioException("Arbitro inv�lido ou nulo. Verifique se os campos informados est�o corretos!");
	}
		
	//verifica o nome do Arbitro
	if(arb.getNomeArbitro() == null || arb.getNomeArbitro().equals("")){
			throw new NegocioException("Nome do Arbitro inv�lido!");
		}
	
	//verifica se o nome do Arbitro � v�lido
	if(!ValidacoesGerais.isNomeValid(arb.getNomeArbitro())){
		 throw new NegocioException("O nome do Arbitro n�o pode conter caracteres num�ricos nem especiais");
	 }
	
	if(arb.getCodArbitro()<0){
		throw new NegocioException("C�digo inv�lido");
	}
	
	try {
		rep.salvar(arb);
	} catch (ConexaoException e) {
		throw new NegocioException("Verifique a conex�o com o Banco de Dados! "+e.getMessage());
	} 
	catch (RepositorioException e) {
		throw new NegocioException("Erro ao Salvar um Arbitro! "+e.getMessage());
	}
}

/**
 * Valida e exclui um arbitro pelo seu codigo 
 * 
 * @param codArbitro
 * @throws NegocioException
 */
 
public void excluirCod(int codArbitro) throws NegocioException{
	
	if(codArbitro <= 0){
		throw new NegocioException("Codigo Inv�lido!");
	}
	
	try {
					
		rep.excluirCod(codArbitro);
		
	} catch (ConexaoException e) {
		
		throw new NegocioException("Verifique a conex�o com o Banco de Dados "+e.getMessage());
		
	} catch (RepositorioException e) {
		
		throw new NegocioException("Erro ao Excluir um Arbitro! "+e.getMessage());
	}
}

/**
 * Valida e exclui um Arbitro pelo seu nome
 * @param nomeArbitro
 * @throws NegocioException
 */
public void excluirNome(String nomeArbitro) throws NegocioException{
	
	
	if(!ValidacoesGerais.isNomeValid(nomeArbitro)){
		throw new NegocioException("Este campo n�o pode conter caracteres num�ricos nem especiais");
	}
	
	if(nomeArbitro.equals(null) || nomeArbitro.equals("")){
		throw new NegocioException("Nome inv�lido , insira ulgum nome");
	}
	
	try {
		rep.excluirNome(nomeArbitro);
	} catch (ConexaoException e) {
		
		throw new NegocioException("Verifique a conx�o com o Banco de Dados "+e.getMessage());
		
	} catch (RepositorioException e) {
		
		throw new NegocioException("Erro ao excluir uma Atividade "+e.getMessage());
	}
}

/**
 * valida e consulta um arbitro pelo codigo
 * @param codArbitro
 * @return arb
 * @throws NegocioException
 */
public Arbitro consultarCod(int codArbitro) throws NegocioException{
	 Arbitro arb = null;
	 
	 if(codArbitro <= 0){
		 throw new NegocioException("Codigo Inv�lido!");
	 }
	 
	 try {
		arb = rep.consultarCod(codArbitro);
		
		
	} catch (ConexaoException e) {
		
		throw new NegocioException("Verifique a conex�o com o Banco de Dados "+e.getMessage());
		
	} catch (RepositorioException e) {
		
		throw new NegocioException("Erro ao consultar uma Atividade "+e.getMessage());
	}
	
	 return arb;
	
}
/**
 * validada e consulta um arbitro pelo seu nome
 * @param nome_Arbitro
 * @throws NegocioException
 */
public Arbitro consultarNome(String  nomeArbitro) throws NegocioException{
	 Arbitro arb = null;
	 
	 if(!ValidacoesGerais.isNomeValid(nomeArbitro)){
		 throw new NegocioException("Este campo n�o pode conter caracteres num�ricos nem especiais");
	 }
	 //de null para " "
	 if(nomeArbitro.equals(" ") ||nomeArbitro.equals("")){
		 throw new NegocioException("nome Inv�lido , insira algum nome");
	 }
	 
	 try {
		arb = rep.consultarNome(nomeArbitro);
		
		
	} catch (ConexaoException e) {
		
		throw new NegocioException("Verifique a conex�o com o Banco de Dados "+e.getMessage());
		
	} catch (RepositorioException e) {
		
		throw new NegocioException("Erro ao consultar uma Arbitro "+e.getMessage());
	}
	 
		
	 return arb;
	
}
/**
 * Lista todos os arbitros 
 * @return ArrayList<Arbitro>
 * @throws NegocioException
 */
public ArrayList<Arbitro> listarArbitro() throws NegocioException{
	
	ArrayList<Arbitro> list = null;
	
	try {
		list = (ArrayList<Arbitro>) rep.listar();
	} catch (ConexaoException e) {
		throw new NegocioException("Verifique a conex�o com o Banco de Dados "+e.getMessage());
	} catch (RepositorioException e) {
		throw new NegocioException("Erro ao listar Arbitros " +e.getMessage());
	}
	
	return list;
	}
}
